
#include "WProgram.h"
#include "WString.h"
#include "./protocol.h"
#include "./status.h"

/*#define WAIT_ADR 0
#define WAIT_CMD 1
#define POLL_TIMER 0
#define ANSWER_TIMER 1
extern scheduler RTC;
extern sdetector Status;*/

extern status Status;

protocol::protocol() {
	rxCommand='x';
	addSprinkler=0;
	valueSprinkler=0;
	minuteSpinkler[0]='0';
	minuteSpinkler[1]='0';
	minuteSpinkler[2]='0';
	
}

void protocol::start(long speed){
	Serial.begin(speed);
	delay(3000);
	Serial.print("+++");
	delay(3000);
	Serial.print("ATDH00000000\r");
	delay(1000);
	Serial.print("ATDL0000FFFF\r");
	delay(1000);
	Serial.print("ATCN\r");
	delay(1000); 
}  
 
void protocol::readMessage(char incoming){
	char incomingByte=incoming;	
	switch(incomingByte){
		case 'S':			//comando modifica sprinkler
			cnt=0;       	//resetta il contatore di caratteri
			rxCommand=char(incomingByte);
			break;
		default:			//altri caratteri definiti da protocollo
			switch(cnt){
				case 0:				//indirizzo prinkler
					if(rxCommand=='S'){
						if(incomingByte=='1'){
							addSprinkler=SP1;
						}else if(incomingByte=='2'){
							addSprinkler=SP2;
						}else if(incomingByte=='3'){
							addSprinkler=SP3;
						}else if(incomingByte=='4'){
							addSprinkler=SP4;
						}
					}
					cnt++;
					break;
				case 1:
					if(rxCommand=='S'){
						if(incomingByte=='1'){
							valueSprinkler=SP_ON;
						}else if(incomingByte=='0'){
							valueSprinkler=SP_OFF;
						}
					}
					cnt++;
					break;
				case 2:
					if(rxCommand=='S'){
						cntArray=0;
						minuteSpinkler[cntArray]=char(incomingByte);
					}
					cntArray++;
					cnt++;
					break;
				case 3:
					if(rxCommand=='S'){
						minuteSpinkler[cntArray]=char(incomingByte);
					}
					cntArray++;
					cnt++;
					break;
				case 4:		//4: ultimo numero
					if(rxCommand=='S'){
						minuteSpinkler[cntArray]=char(incomingByte);
					}
					valMinutes=(minuteSpinkler[0]-0x30)*100+(minuteSpinkler[1]-0x30)*10+(minuteSpinkler[2]-0x30);
					break;
			}
			break;
	
	}
	//aggiornamento variabili di stato
	if(rxCommand=='S'){			//controllo comando Sprinkler
		if(valMinutes!=0){		//controllo che il valore dei minuti sia diverso da 0
			if(addSprinkler==SP1){						//Sprinkler 1
				if(valueSprinkler==SP_ON){
					Status.setTimerSP1(valMinutes);
					Serial.println("setTimerSP1");
					//rxCommand='x';
					//valMinutes=0;
				}else if(valueSprinkler=SP_OFF){
					Status.stopSP1();
					Serial.println("stopSP1");
					//rxCommand='x';
					//valMinutes=0;
				}
			}else if(addSprinkler==SP2){					//Sprinkler 1
				if(valueSprinkler==SP_ON){
					Status.setTimerSP2(valMinutes);
					Serial.println("setTimerSP2");
					//rxCommand='x';
					//valMinutes=0;
				}else if(valueSprinkler=SP_OFF){
					Status.stopSP2();
					Serial.println("stopSP2");
					//rxCommand='x';
					//valMinutes=0;
				}			
			}else if(addSprinkler==SP3){				//Sprinkler 1
				if(valueSprinkler==SP_ON){
					Status.setTimerSP3(valMinutes);
					Serial.println("setTimerSP3");
					//rxCommand='x';
					//valMinutes=0;
				}else if(valueSprinkler=SP_OFF){
					Status.stopSP3();
					Serial.println("stopSP3");
					//rxCommand='x';
					//valMinutes=0;
				}			
			}else if(addSprinkler==SP4){				//Sprinkler 1
				if(valueSprinkler==SP_ON){
					Status.setTimerSP4(valMinutes);
					Serial.println("setTimerSP4");
					//rxCommand='x';
					//valMinutes=0;
				}else if(valueSprinkler=SP_OFF){
					Status.stopSP4();
					Serial.println("stopSP4");
					//rxCommand='x';
					//valMinutes=0;
				}
			}
		}
	}
}
/*
 * Definisce il messaggio di invio della temperatura esterna.
 * TZY±OOOO:
 *		T comando temperatura;
 *		Z tipo di sensore (1=interno, 2=esterno); [in questo caso stiamo lavorando con la sonda esterna. (2)]
 *		Y± temperatura positiva o negativa;
 *		OOOO parte intera dei gradi celsius;
 *		La parte decimale viene approssimata all'intero.
 */
void protocol::sendExternalTemp(){

	char extTemp[8]="T2XXXXX";
	int temp=30;
	if(temp>0){
		extTemp[2]='+';
	}else{
		extTemp[2]='-';
	}
    String s=String(temp);
      if (s.length()==1) { 
        if(s.charAt(0)=='-'){
        s[0]='0';
        }                    
      s="000"+s;
    }
    else if(s.length()==2) {
      if(s.charAt(0)=='-'){
        s[0]='0';
      }
      s="00"+s;      
    }
    else if(s.length()==3) {
      if(s.charAt(0)=='-'){
        s[0]='0';
      }
      s="0"+s;    
    }else if(s.length()==4){
      if(s.charAt(0)=='-'){
        s[0]='0';
      }
    }
	extTemp[3]=s.charAt(0);
    extTemp[4]=s.charAt(1);
    extTemp[5]=s.charAt(2);
    extTemp[6]=s.charAt(3);	
	
	Serial.println(extTemp);
}






